package gjfshiyan2.demo;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

/**
 * @author gjf
 * Created by gjf on 2020/4/10
 */

@EnableConfigurationProperties(CustomProperties.class)
public class ConfigClass {
    @Bean
    @ConditionalOnProperty(prefix = "gjf.demo2",name = "world-god",havingValue = "true")
    CommandLineRunner createCustomCommandLineRunner(Environment env){
        return new AchieveCommandLineRunner(env);
    }


    static class NoticeEvent extends ApplicationEvent {
        private static final Logger logger = LoggerFactory.getLogger(NoticeEvent.class);

        /**
         * 储存信息
         */

        private final String message;

        public NoticeEvent (String message){
            super(message);
            this.message = message;
            logger.info("添加事件成功！message: {}",message);
        }
        public String getMessage() {return message;}
    }


    @Component
    static class NoticeListener implements ApplicationListener<NoticeEvent> {

        private static final Logger logger = LoggerFactory.getLogger(NoticeEvent.class);

        @Override
        public void onApplicationEvent(NoticeEvent noticeEvent) {
            logger.info("事件监听器获取到 NoticeEvent, 睡眠当前线程 2 秒...");
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            logger.info("NoticesEvent 的 message 属性是 : {}", noticeEvent.getMessage());
        }
    }

}
